namespace System.Transactions.Abstractions
{
    public interface ITransactionManager
    {
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class.
        ITransaction CurrentTransaction { get; }

        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class.
        ITransactionScope CreateScope();

        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     and sets the specified transaction as the ambient transaction, so that transactional
        //     work done inside the scope uses this transaction.
        //
        // Parameters:
        //   transactionToUse:
        //     The transaction to be set as the ambient transaction, so that transactional
        //     work done inside the scope uses this transaction.
        ITransactionScope CreateScope(ITransaction transactionToUse);

        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified requirements.
        //
        // Parameters:
        //   scopeOption:
        //     An instance of the System.Transactions.TransactionScopeOption enumeration
        //     that describes the transaction requirements associated with this transaction
        //     scope.
        ITransactionScope CreateScope(TransactionScopeOption scopeOption);
        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified timeout value, and sets the specified transaction as the
        //     ambient transaction, so that transactional work done inside the scope uses
        //     this transaction.
        //
        // Parameters:
        //   transactionToUse:
        //     The transaction to be set as the ambient transaction, so that transactional
        //     work done inside the scope uses this transaction.
        //
        //   scopeTimeout:
        //     The System.TimeSpan after which the transaction scope times out and aborts
        //     the transaction.
        ITransactionScope CreateScope(ITransaction transactionToUse, TimeSpan scopeTimeout);
        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified timeout value and requirements.
        //
        // Parameters:
        //   scopeOption:
        //     An instance of the System.Transactions.TransactionScopeOption enumeration
        //     that describes the transaction requirements associated with this transaction
        //     scope.
        //
        //   scopeTimeout:
        //     The System.TimeSpan after which the transaction scope times out and aborts
        //     the transaction.
        ITransactionScope CreateScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout);
        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified requirements.
        //
        // Parameters:
        //   scopeOption:
        //     An instance of the System.Transactions.TransactionScopeOption enumeration
        //     that describes the transaction requirements associated with this transaction
        //     scope.
        //
        //   transactionOptions:
        //     A System.Transactions.TransactionOptions structure that describes the transaction
        //     options to use if a new transaction is created. If an existing transaction
        //     is used, the timeout value in this parameter applies to the transaction scope.
        //     If that time expires before the scope is disposed, the transaction is aborted.
        ITransactionScope CreateScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions);
        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified timeout value and COM+ interoperability requirements,
        //     and sets the specified transaction as the ambient transaction, so that transactional
        //     work done inside the scope uses this transaction.
        //
        // Parameters:
        //   transactionToUse:
        //     The transaction to be set as the ambient transaction, so that transactional
        //     work done inside the scope uses this transaction.
        //
        //   scopeTimeout:
        //     The System.TimeSpan after which the transaction scope times out and aborts
        //     the transaction.
        //
        //   interopOption:
        //     An instance of the System.Transactions.EnterpriseServicesInteropOption enumeration
        //     that describes how the associated transaction interacts with COM+ transactions.
        ITransactionScope CreateScope(ITransaction transactionToUse, TimeSpan scopeTimeout, EnterpriseServicesInteropOption interopOption);

        //
        // Summary:
        //     Initializes a new instance of the System.Transactions.ITransactionScope class
        //     with the specified scope and COM+ interoperability requirements, and transaction
        //     options.
        //
        // Parameters:
        //   scopeOption:
        //     An instance of the System.Transactions.TransactionScopeOption enumeration
        //     that describes the transaction requirements associated with this transaction
        //     scope.
        //
        //   transactionOptions:
        //     A System.Transactions.TransactionOptions structure that describes the transaction
        //     options to use if a new transaction is created. If an existing transaction
        //     is used, the timeout value in this parameter applies to the transaction scope.
        //     If that time expires before the scope is disposed, the transaction is aborted.
        //
        //   interopOption:
        //     An instance of the System.Transactions.EnterpriseServicesInteropOption enumeration
        //     that describes how the associated transaction interacts with COM+ transactions.
        ITransactionScope CreateScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, EnterpriseServicesInteropOption interopOption);
    }
}